﻿类 主窗口类 继承 窗口类
	[绑定信息] //IDE自动生成的UI绑定信息(UI变量绑定,事件绑定), 不建议新人手动修改, 可收缩隐藏
		[布局类, _布局元素1, "布局元素1"]
			[元素事件_绘制, 布局元素1_开始绘制, 1]
			[元素事件_炫彩定时器, 布局元素1_炫彩定时器, 1]
			[元素事件_绘制完成, 布局元素1_绘制完成, 1]
		[滑动条类, _滑动条1, "滑动条1"]
			[元素事件_滑动条改变, 滑动条1_滑块位置改变, 1]
	文本型  _布局文件 = "main.xml"//关联的UI窗口布局文件

	播放音频 音频
	整型 播放句柄
	函数 整型 运行() //窗口启动函数, 优先自动处理内部(加载窗口布局文件, 绑定UI变量, 注册UI事件), 然后窗口创建完成, 调用用户代码
		//此处窗口已创建完成, 用户可在此处操作或导入初始数据到UI
		显示(真)  //显示出窗口

		音频.初始化()
		播放句柄 = 音频.打开文件("test.mp3")
		_滑动条1.置范围(音频.取音乐长度(播放句柄))
		音频.播放(播放句柄)
		_布局元素1.置炫彩定时器(1, 200)

		返回 0

	函数 UI事件 整型 布局元素1_开始绘制(元素句柄 来源句柄, 绘图句柄 绘图句柄1, 逻辑型* 是否拦截)

		整型 样本数 = 元素_取宽度(来源句柄);  // 每次读取的样本数,按需设置
		整型 缩放因子 = 32768; // 振幅缩放因子,有符号短整数最大值:2的15次方
		整型 x = 0;
		动态数组<短整型> 样本数据(样本数); // 存储样本的缓冲区
		整型 返回长度 = 音频.取音频数据(播放句柄, (void*)样本数据.取数据(), 取类型大小(短整型) * 样本数)
		
		//返回长度 是成功获取的音频数据长度(取决于BASS当前解析了多少采样数据)
		整型 高度 = 元素_取高度(来源句柄)
		如果 (返回长度 > 0)
			整型 采样数 = 返回长度 / 取类型大小(短整型);
			for (整型 i = 0; i < 采样数;++ i)
				// 样本数据一般就是振幅值,这里归一化为-1到1之间
				// 必须有一个数值为浮点型,否则计算结果将被优化为整数(比如0.1取整为0)
				浮点型 振幅值 = 样本数据[i] / (浮点型)缩放因子;
				如果 (振幅值 >= 0)
					绘制_置画刷颜色(绘图句柄1, 取颜色值RGBA(100, 200, 100, 255))
					绘制_线条(绘图句柄1, x, 高度, x, 高度 - 振幅值 * 高度)
				否则
					绘制_置画刷颜色(绘图句柄1, 取颜色值RGBA(100, 100, 200, 255))
					绘制_线条(绘图句柄1, x, 高度, x, 高度 + 振幅值 * 高度)
				
				x = x + 1

		*是否拦截 = 真


		返回 0
	函数 UI事件 整型 布局元素1_炫彩定时器(元素句柄 来源句柄, 正整型 时钟ID, 逻辑型* 是否拦截)
		_滑动条1.置当前位置(音频.取播放位置(播放句柄))
		_布局元素1.重绘(真)
		返回 0
	函数 UI事件 整型 布局元素1_绘制完成(元素句柄 来源句柄, 绘图句柄 绘图, 逻辑型* 是否拦截)

		返回 0
	函数 UI事件 整型 滑动条1_滑块位置改变(元素句柄 来源句柄, 整型 当前位置,逻辑型 *是否拦截)
		音频.置播放位置(播放句柄, 当前位置)
		返回 0

主窗口类  主窗口  //将上面IDE生成的界面类在这里定义变量(实例化到具体变量)
函数 整型 入口函数_窗口() //窗口程序入口函数, 程序启动优先进入此函数
	//在进入UI前需要运行的代码写在这里

	炫彩_初始化(真)  //初始化设计器使用的炫彩界面库
	炫彩_启用自动重绘UI(真) //当修改UI后将自动调用重绘函数更新UI
	#加载资源文件     //指示在此处自动加载资源文件, 根据项目属性设置, 从文件 或 从内存
	主窗口.运行()    //运行上面设计器生成的类中的运行()函数
	//在进入UI后需要运行的代码写在这里

	炫彩_运行()  //运行消息循环
	炫彩_退出()  //程序退出释放界面库资源
	返回 0


